package top.wfzzq.dp.abstractFactory;

/**
 * 抽象工厂，这个模式是工厂模式的升级版本，更加抽象，更加灵活
 * 
 * @author wanghui
 *
 */
public class Demo {
	public static void main(String[] args) {
		// 系统的中的抽象工厂，jdbc框架
		// 由于jdbc是数据库连接层框架，java设计的时候无法完成细节
		// 比如怎么连接，怎么处理数据库语句，怎么取回结果等等
		// jdbc就用了全部抽象类去定义，不提供任何实现
		// 将实现交托给具体的数据库厂商实现
		// Connection connection=DriverManager.getConnection("");
		// 全部都是抽象，不能创建
		Factory factory;
		Software softwave;
		Toy toy;
		// 通过工厂管理
		factory = FactoryManger.getFactory("microsoft");
		//其他抽象对象都是抽象工厂创建
		softwave = factory.makeSoft();
		toy = factory.makeToy();
		softwave.startup();
		softwave.shutdown();
		toy.play();
		System.out.println("====================================");
		factory=FactoryManger.getFactory("sony");
	    softwave=factory.makeSoft();
	    toy=factory.makeToy();
		softwave.startup();
		softwave.shutdown();
		toy.play();
		System.out.println("====================================");
		factory=FactoryManger.getFactory("Alibaba");
		softwave=factory.makeSoft();
		softwave.startup();
		softwave.shutdown();
		System.out.println("====================================");
		factory=FactoryManger.getFactory("Tencent");
		softwave=factory.makeSoft();
		toy=factory.makeToy();
		softwave.startup();
		softwave.shutdown();
		toy.play();
		
	}
}
